﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using extremeEvents.Data;

namespace extremeEvents
{
    public partial class EditarUtilizador : UserControl
    {

        //o id do utilizador que está a ser editar no momento
        private Guid id;

        public EditarUtilizador()
        {
            InitializeComponent();

            //definir lista de paises disponiveis
            List<string> paises = new List<string>();
            paises.Add("Portugal");
            paises.Add("Outros");
            paisComboBox.DataSource = paises;

        }

        /// <summary>
        /// Faz o load do formulario
        /// </summary>
        /// <param name="id">O ID do utilizador</param>
        public void carregar(Guid id)
        {

            //guardar referencia do utilizador que está a ser editado
            this.id = id;

            try
            {

                //procurar utilizador seleccionado
                procurarUtilizador_porGuid_Result rst = (procurarUtilizador_porGuid_Result)DLGenerica.Instance.getUtilizadorById(id);

                //definir valores do formulario
                Email.Text = rst.Email;
                primeiro_nome.Text = rst.primeiro_nome;
                ultimo_nome.Text = rst.ultimo_nome;
                nif.Text = rst.nif;
                morada.Text = rst.morada;
                numero_porta.Text = rst.numero;
                codigo_postal.Text = rst.codigo_postal;
                distrito.Text = rst.distrito;
                concelho.Text = rst.concelho;
                freguesia.Text = rst.freguesia;
                organizacao.Text = rst.nome_organizacao;
                paisComboBox.SelectedIndex = paisComboBox.Items.IndexOf(rst.pais);

                //verificar genero
                if (rst.genero == "Masculino")
                    masculino.Select();
                else
                    feminino.Select();

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }

        /// <summary>
        /// Faz o submit do formulario e retorna ao menu anterior
        /// </summary>
        private void submit()
        {

            var error_msg = ""; //utilizada para guardar o erro encontrado

            //verificar dados obrigatorios
            if (Email.Text.Length == 0)
                error_msg = "Error 04: O endereço de email inserido é invalido. Por favor corrija-o e tente novamente";
            else if (primeiro_nome.Text.Length == 0 || ultimo_nome.Text.Length == 0 || nif.Text.Length == 0)
                error_msg = "Error 24: Ocorreram erros ao alterar o utilizar, verifique se todos os campos estão corretos.";

            //verifica se foi encontrado algum erro
            if (error_msg.Length > 0)
            {
                MessageBox.Show(error_msg, "Erro ao guardar as alterações");
                return;
            }

            using (var utilizadorDB = new extremeEventsEntities())
            {

                //chamar sp para actualizar o utilizador
                var rst = utilizadorDB.editarUtilizador(
                    this.id,
                    Email.Text,
                    primeiro_nome.Text,
                    ultimo_nome.Text,
                    nif.Text,
                    organizacao.Text,
                    masculino.Checked ? "Masculino" : "Feminino",
                    morada.Text,
                    numero_porta.Text,
                    codigo_postal.Text,
                    distrito.Text,
                    concelho.Text,
                    freguesia.Text,
                    paisComboBox.SelectedItem.ToString()
                );

                //informa utilizador que foi editado com sucesso
                MessageBox.Show("Utilizador editado com sucesso!");
                //retornar à lista de utilizadores
                Navegador.Instance.irPara("utilizadoresPage");
            }
        }

        private void cancelarButton_Click(object sender, EventArgs e)
        {
            Navegador.Instance.irPara("utilizadoresPage");
        }

        private void guardarButton_Click(object sender, EventArgs e)
        {
            //efectuar submit do formulario
            submit();
        }

        private void EditarUtilizadorForm_Paint(object sender, PaintEventArgs e)
        {
            Navegador.Instance.editarUtiForm = this;
        }

        private void EditarUtilizadorForm_VisibleChanged(object sender, EventArgs e)
        {

            //carregar apenas se estiver visivel
            if (!this.Visible)
                return;

            //carregar dados
            this.carregar(Navegador.Instance.utilizador_selecionado);

        }
    }
}
